package com.douma._2022;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 数组拼接 {

    /*
    题目 1：数组拼接

    题目描述：
    现在有多组整数数组，需要将他们合并成一个新的数组，合并规则：
    从每个数组里按顺序取出固定长度的内容，合并到新的数组，取完的内容会删除；
    如果该行不足固定长度，或者已经为空，则直接取出剩余部分的内容放到新的数组中，继续下一行。

    输入描述：
    第一行表示每次读取的固定长度，0 < 长度 < 10
    第二行是整数数组的数目，0 < 数目 < 10000
    第 3~n 行是徐亚奥合并的数组，不同的数组用换行分割，元素之间用逗号分割，最大不超过 100 个元素

    输出描述：
    输出一个新的数组，用逗号隔开

    示例 1
    输入：
    3
    2
    2,5,6,7,9,5,7
    1,7,4,3,4

    输出：
    2,5,6,1,7,4,7,9,5,3,4,7

    说明：获得长度 3 和数组数目 2，先遍历第一行，获得 2,5,6 ，
    再遍历第二行，获得 1,7,4。再循环回到第一行获得 7,9,5，
    再遍历第二行获得 3,4，再回到第一行获得 7
    */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int fixedLen = sc.nextInt();
        sc.nextLine();
        int rows = sc.nextInt();
        sc.nextLine();

        // 将多个数组的数据存储到 data 中
        List<String>[] data = new List[rows];
        for (int i = 0; i < rows; i++) {
            data[i] = new ArrayList<>();
            String[] line = sc.nextLine().split(",");
            for (int j = 0; j < line.length; j++) {
                data[i].add(line[j]);
            }
        }

        List<String> res = new ArrayList<>();
        // 表示还剩多少个数组没有遍历完
        int remainRows = rows;
        // 用于记住每一个数组遍历到的位置
        int[] flags = new int[rows];
        while (remainRows > 0) {
            for (int row = 0; row < rows; row++) {
                // 如果当前数组已经遍历完，则遍历下一个数组
                if (flags[row] == -1) continue;

                // 情况一：当前行剩余的元素个数不足 fixed_len
                int thisRowLen = data[row].size();
                if (flags[row] + fixedLen >= thisRowLen) {
                    res.addAll(data[row].subList(flags[row], thisRowLen));
                    // 当前行对应的数组已经遍历完，那么 remainRows 减一，flags[row]设置为 -1
                    remainRows -= 1;
                    flags[row] = -1;
                } else { // 情况二：当前行剩余的元素个数大于 fixed_len
                    res.addAll(data[row].subList(flags[row], flags[row] + fixedLen));
                    flags[row] += fixedLen;
                }
            }
        }

        System.out.println(String.join(",", res));

        sc.close();
    }

}
